package com.atguigu.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * create by undeRdoG on  2021-06-08  14:26
  * 凡心所向，素履以往，生如逆旅，一苇以航。
  */
object Spark13_RDD_Operator_Transform {

  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setAppName("Operator").setMaster("local[*]")
    val sc = new SparkContext(sparkConf)

    /**
      * 交并补  要求两个 RDD 的类型必须是一样的
      *
      * 拉链是没有强制要求的    warning：两个 RDD 的分区数一定要一致、  每个RDD 的每个  分区中的 数据个数也 一定要一样
      **/


    /**
      * 双 value 类型的操作
      **/
    val rdd1 = sc.makeRDD(List(1, 2, 3, 4))
    val rdd2 = sc.makeRDD(List(3, 4, 5, 6))

    // 交集
    rdd1.intersection(rdd2).collect().foreach(println)

    // 并集
    rdd1.union(rdd2).collect().foreach(println)

    // 差集  站在 rdd1 的角度去取差集
    println(rdd1.subtract(rdd2).collect().mkString(","))

    // 拉链表  [1-3,2-4,3-5,4-6]
    val zipRDD: RDD[(Int, Int)] = rdd1.zip(rdd2)
    println(zipRDD.collect().mkString(","))

  }
}
